//实现一个函数，检查一棵二叉树是否为二叉搜索树。 
//示例 1：
//
// 
//输入：
//    2
//   / \
//  1   3
//输出：true
// 
//
//示例 2：
//
// 
//输入：
//    5
//   / \
//  1   4
//     / \
//    3   6
//输出：false
//解释：输入为: [5,1,4,null,null,3,6]。
//     根节点的值为 5 ，但是其右子节点值为 4 。 
//
// Related Topics 树 深度优先搜索 二叉搜索树 二叉树 👍 110 👎 0


package LeetCode.editor.cn;

/**
 * @author ldltd
 * @date 2025-07-01 23:25:19
 * @description 面试题 04.05.合法二叉搜索树
 */
public class LegalBinarySearchTreeLcci{
	 public static void main(String[] args) {
	 	 //测试代码
	 	 LegalBinarySearchTreeLcci fun=new LegalBinarySearchTreeLcci();
	 	 Solution solution = fun.new Solution();

	 }
	 
//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)

//  Definition for a binary tree node.
  public class TreeNode {
      int val;
      TreeNode left;
      TreeNode right;
      TreeNode() {}
      TreeNode(int val) { this.val = val; }
      TreeNode(int val, TreeNode left, TreeNode right) {
          this.val = val;
          this.left = left;
          this.right = right;
      }
  }

class Solution {
   	//二叉搜索树的 中序一定是递增的
    private long pre = Long.MIN_VALUE; // 用于存储上一个访问的节点值，初始化为最小值
    public boolean isValidBST(TreeNode root) {
        return dfs(root);
    }
    private boolean dfs(TreeNode node){
        if (node == null) {
            return true; // 如果当前节点为空，返回 true
        }
        if(!dfs(node.left))
            return false;
        // 检查当前节点值是否大于上一个访问的节点值
        if (node.val <= pre) {
            return false; // 如果当前节点值不大于上一个节点值，则不是二叉搜索树
        }
        pre = node.val; // 更新上一个访问的节点值为当前节点值
        return dfs(node.right);

    }
}
//leetcode submit region end(Prohibit modification and deletion)

}
